package airport

import "gitee.com/skew/mu_grpc/go/base"

type CancelReasonInfo struct {
	Code        int    `json:"code"`
	Name        string `json:"name"`
	Description string `json:"description"`
	Category    string `json:"category"`
	Recoverable bool   `json:"recoverable"`
	Severity    string `json:"severity"` // low, medium, high
}
type CancelReasonDatabase struct {
	ErrorCodes []CancelReasonInfo `json:"error_codes"`
}

type AirportState struct {
	SelCheck int `json:"SelCheck"` //0x01：位于放飞/收纳位置 0x02：位于接机位置 0x03：位于闭合位置
	/*
		顶盖状态
		0x01：位于放飞/收纳位置
		0x02：位于接机位置
		0x03：位于闭合位置
		0x04：正在向两侧张开
		0x05：正在向中间合拢
		0x06：位于闭合与接机位置之间
		0x07：位于接机与收纳/放飞位置之间
		0x08：未知，尚未进行原点初始化
	*/
	CoverStatus int `json:"CoverStatus"`
	/*
		停机坪状态
		0x01：位于顶部
		0x02：位于拨桨位
		0x03：位于底部
		0x04：正在升起
		0x05：正在下降
		0x06：位于顶部与拨桨位之间
		0x07：位于拨桨位与底部之间
	*/
	ApronStatus int `json:"ApronStatus"`
	/*
		归中机构状态
		0x01：已归中
		0x02：已松开
		0x03：正在归中
		0x04：正在松开
		0x05：位于中间位置
		0x06：未知，尚未进行原点初始化
	*/
	CentreDeviceStatus int `json:"CentreDeviceStatus"`
	/*
		无人机起飞状态
		0x01 起飞中
		0x02 起飞完成
	*/
	TakeOffStatus int `json:"TakeOffStatus"`
	/*
		无人机自检状态
		0x01 自检中
		0x02 自检成功
		0x03 自检失败
	*/
	UavSelCheckStatus int `json:"UavSelCheckStatus"`
	//任务状态 0--待处理  1-执行中 2-已完成 3--取消 4--飞机落库 5--机库复位 6---图片上传完成 7--开始飞行
	MisiionState int `json:"MisiionState"`
	//MisiionStateDji int  `json:"MisiionStateDji"`
	NestStatus   int  `json:"NestStatus"`   //0---待机  1---作业中
	PlcStatus    int  `json:"PlcStatus"`    //plc状态 1--空闲 2--作业中
	BatteryReady bool `json:"BatteryReady"` //电池状态 1--空闲 0---检查中

	MisiionStateDji int `json:"MisiionStateDji"`
	//机库拒绝飞行的原因
	CancelReason int `json:"CancelReason"`
}
type Battery struct {
	Existed  bool   `form:"Existed" json:"Existed"`
	Index    int    `form:"Index" json:"Index"`
	Capacity int    `form:"Capacity" json:"Capacity"`
	Status   string `form:"Status" json:"Status"`
}

type UAV struct {
	Existed bool   `form:"Existed" json:"Existed"`
	SN      string `form:"SN" json:"SN"`
	Index   int    `form:"Index" json:"Index"`
	Status  string `form:"Status" json:"Status"`
}

type Payload struct {
	Existed bool   `form:"Existed" json:"Existed"`
	Index   int    `form:"Index" json:"Index"`
	Type    string `form:"Type" json:"Type"`
}

type BaseData struct {
	SN               string  `binding:"required" json:"SN"`                      //机场SN号
	Status           string  `binding:"required" json:"Status"`                  //机场状态
	InnerTemperature float32 `gorm:"column:inner_temp" json:"InnerTemperature"`  //	温度(内)(°)
	OuterTemperature float32 `gorm:"column:outer_temp" json:"OuterTemperature"`  //温度(外)(°)
	InnerHumidity    float32 `gorm:"column:inner_humidity" json:"InnerHumidity"` //湿度(内)(%)
	OuterHumidity    float32 `gorm:"column:outer_humidity" json:"OuterHumidity"` //湿度(外)(%)
	WindSpeed        float32 `gorm:"column:wind_speed" json:"WindSpeed"`         //风速(m/s)
	WindDirection    float32 `gorm:"column:wind_direction" json:"WindDirection"` //风向(°)
	Beam             float32 `gorm:"column:beam" json:"Beam"`                    //	光照
	Rain             float32 `gorm:"column:rain" json:"Rain"`                    //	雨量(mm)
	Lat              float64 `gorm:"column:lat" json:"Lat"`                      //纬度
	Lng              float64 `gorm:"column:lng" json:"Lng"`                      //	经度
	Warns            string  `gorm:"column:warns" json:"Warns"`                  //报警信息，通过;隔开
	TaskId           string  `gorm:"-" json:"TaskId"`                            //执行任务的id值
	IsSleeping       bool    `gorm:"-" json:"IsSleeping"`                        // 是否休眠
	Openbox          bool    `gorm:"-" json:"Openbox"`                           // 是否开箱
	LastConnectTime  int64   `gorm:"-" json:"LastConnectTime"`                   // 最后连接时间戳
	CoverCheck       int     `gorm:"-" json:"CoverCheck"`                        // 覆盖检查状态
	Openingflag      int     `gorm:"-" json:"Openingflag"`                       // 开启标志
}

//	AirportData
//	@Description: 数据库db里的数据结构
//
// 作者 朱懿 2023-04-27 09:05:41
type AirportData struct {
	BaseData
	ServerTime base.LocalTime `gorm:"index" json:"server_time"` //插入服务器的时间
	Uavs       base.JSON      `json:"uavs"`                     //无人机列表
	Payloads   base.JSON      ` json:"payloads"`                //载荷列表
	Batteries  base.JSON      ` json:"batteries"`               //电池列表
	AutoFlyDJI int            `gorm:"-"`                        //起飞模式
	AutoFlyM15 int            `gorm:"-"`                        //起飞模式
}

type Uavs struct {
	Existed bool   `json:"Existed"`
	SN      string `json:"SN"`
	Index   int    `json:"Index"`
	Status  string `json:"Status"`
}
type Payloads struct {
	Existed  bool           `json:"Existed"`
	Type     string         `json:"Type"` //1 喊话器 speaker，2 探照灯 light，3抛投器 dropper，4激光雷达 lidar
	Index    int            `json:"Index"`
	PsdkName string         `json:"PsdkName"`
	CmdState map[string]any `json:"CmdState"` //{"open": 2}
}
type Batteries struct {
	Existed  bool   `json:"Existed"`
	Capacity int    `json:"Capacity"`
	Index    int    `json:"Index"`
	Status   string `json:"Status"`
}
